package com.xxmassdeveloper.mpchartexample;

import android.graphics.Bitmap;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SyncFailedException;


public class CaptureUtil {


    private static final String TAG = "Rachel_test";

    public static boolean saveImg(Bitmap bitmap) {
        String usbPath = Environment.getExternalStorageDirectory() + File.separator + "hhhhhhh" + ".png";
        boolean isUsbSuccess = saveBitmap(bitmap, usbPath);
        if (isUsbSuccess) {
            return true;
        }
        return false;
    }

    /**
     * 保存截图
     */
    private static boolean saveBitmap(Bitmap bitmap, String path) {
        File file = new File(path);
        mkFile(file);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
//            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
            ensureWriteFile(file);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 创建文件
     */
    public static void mkFile(File file) {
        if (file.exists()) {
            file.delete();
        }
        if (!file.exists()) {
            file.getParentFile().mkdirs();
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        Log.e(TAG, "保存的路径: " + file.getAbsolutePath());
    }

    /**
     * //防止断电导致的文件记录不成功
     * //对于输出设备或磁盘文件，flush只能保证数据到达内核缓冲区，
     * //并不能保证数据到达物理设备, 因此应该在调用flush后，调用sync()，确保数据存入磁盘。
     * //fileOutputStream.getFD().sync()在此无效果？不太明拔
     */
    public static void ensureWriteFile(File file) {
        FileInputStream fos = null;
        try {
            fos = new FileInputStream(file);
            fos.getFD().sync();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (SyncFailedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


}